<?php
/**
 * @Description jwt组件
 * @Sonkwl Xiong
 * @Date 2022/01/07 13:47:45
 */
namespace procjson;

class jwt{
    static public $keystr='WHSS';
    static public $keyint=7;
    static public $jwt="";//jwt版本
    static public $exp="";

    //@Sonkwl Xiong 2022/03/04 20:19:05
    //@Desc 设置jwt
    static public function Set($id){
        if(self::$jwt=="V1"){
            return self::SetJWTV1($id);
        }else{
            return self::SetJWT($id);
        }
    }
    //@Sonkwl Xiong 2022/03/04 20:19:22
    //@Desc 校验jwt
    static public function Check($token){
        if(self::$jwt=="V1"){
            return self::CheckJWTV1($token);
        }else{
            return self::CheckJWT($token);
        }
    }

    //@Sonkwl Xiong 2022/03/04 20:24:05
    //@Desc 获得id
    static public function Get($arr){
        if(self::$jwt=="V1"){
            return $arr[0];
        }else{
            return $arr["id"];
        }
    }

    //IHDS加密算法
	/*
	* $rInt操作权值，一般使用(可以自定义)：0:查询，1:新增，2:修改，3:删除，5:跨域验证,7:JWT
	*/
	static public function SetDoIHDS($string,$rInt)
	{
		$hex="";
		for($i=0;$i<strlen($string);$i++)
			$hex.=dechex(ord($string[$i])+$rInt);
		return $hex.$rInt.date("iHds");
	}
	//IHDS解密算法
	static public function GetDoIHDS($hex,$rInt)
	{   
		$t_hex=substr($hex,0,strlen($hex)-strlen($rInt.date("iHds")));
		$string=""; 
		for($i=0;$i<strlen($t_hex)-1;$i+=2)
			$string.=chr(hexdec($t_hex[$i].$t_hex[$i+1])-$rInt);
		return $string;
	}
    /**
     * JWT 版本V2
    */
    //生成jwt
    static public function SetJWT($id){
        $token='{"id":"'.$id.'","exp":"'.self::$exp.'","md5":"'.md5(self::$keystr.$id.self::$exp).'"}';
        $hex="";
        $token=self::SetDoIHDS($token,7);
        return $token;
    }
    //验证jwt
    static public function CheckJWT($token){
        //echo self::$keystr;
        $tstr=self::GetDoIHDS($token,7);
        $tokenarray=(array)json_decode($tstr,true);
        if(count($tokenarray)!=3 || $tokenarray["exp"]<time() || $tokenarray["md5"]!=md5(self::$keystr.$tokenarray["id"].$tokenarray['exp'])){
            return false;
        }
        return $tokenarray;
    }
    /**
     * JWT 版本V1
    */
    //生成jwt
    static public function SetJWTV1($id){
        $token=$id.'-'.self::$exp.'-'.md5(self::$keystr.$id.self::$exp);
        $hex="";
        $token=self::SetDoIHDS($token,self::$keyint);
        return $token;
    }
    //验证jwt
    static public function CheckJWTV1($token){
        $tstr=self::GetDoIHDS($token,self::$keyint);
        // echo $tstr;
        $tokenarray=explode('-',$tstr);
        // print_r($tokenarray);
        if(count($tokenarray)!=3 || $tokenarray[1]<time() || $tokenarray[2]!=md5(self::$keystr.$tokenarray[0].$tokenarray[1])){
            return false;
        }
        return $tokenarray;
    }
}
?>